package cn.org.xwb.common.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.log4j.Log4j2;

@Log4j2
public class StringUtil {

    private StringUtil() {}

    /**
     * 判断字符串是否为空，
     * “” 与 null 都认为是空字符串
     *
     * @param str 需要进行判断的字符串
     * @return true 字符串为空；false 字符串非空
     */
    public static boolean isNull(String str) {
        // 字符串不为 null 会进行后续判断，否则直接 return
        // str.isEmpty() 当字符串长度为 0 返回 true，否则返回 false
        return str == null || str.isEmpty();
    }

    /**
     * 对象转 JSON，
     * 依赖：
     * <dependency>
     *     <groupId>com.fasterxml.jackson.core</groupId>
     *     <artifactId>jackson-databind</artifactId>
     * </dependency>
     *
     * @param obj 对象
     * @return JSON
     */
    public static String obj2JSON(Object obj) {
        try {
            return new ObjectMapper().writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            log.error("对象 {} 转 JSON 失败，错误信息：{}，error：{}", obj, e.getMessage(), e);
            return "";
        }
    }

    //验证手机号是否合法正则
    public static final String REGEX_MOBILE = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17([0,1,6,7,]))|(18[0-2,5-9]))\\d{8}$";

    /**
     * 验证手机号是否合法
     *
     * @param phone 手机号
     * @return boolean true合法 false不合法
     * @Author HB
     * @Date 2021/2/26 11:05
     * <p>
     * 运营商号段如下：
     * 中国联通号码：130、131、132、145（无线上网卡）、155、156、185（iPhone5上市后开放）、186、176（4G号段）、
     * 175（2015年9月10日正式启用，暂只对北京、上海和广东投放办理）
     * 中国移动号码：134、135、136、137、138、139、147（无线上网卡）、150、151、152、157、158、159、182、183、187、188、178
     * 中国电信号码：133、153、180、181、189、177、173、149 虚拟运营商：170、1718、1719
     * 手机号前3位的数字包括：
     * 1 :1
     * 2 :3,4,5,7,8
     * 3 :0,1,2,3,4,5,6,7,8,9
     * 总结： 目前java手机号码正则表达式有：
     * a :"^1[3|4|5|7|8][0-9]\d{4,8}$" 一般验证情况下这个就可以了
     * b :"^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\d{8}$"
     *     ^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17([0,1,6,7,]))|(18[0-2,5-9]))\d{8}$
     * matches(REGEX_MOBILE) 匹配手机号
     **/
    public static boolean isPhone(String phone) {
        if (phone.matches(REGEX_MOBILE)) {
            return true;
        } else {
            return false;
        }
    }


}
